package clases.contabilidad;

import CapaDatos.DataSource;
import CapaDatos.Sql;
import global.Dialogos;
import javax.swing.DefaultListModel;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

/**
 *
 * @author Jose Daniel
 */
public class Concepto extends Grupo {

    private int idconcepto;
    private String concepto;
    private Double precio = 0.0;
    private String tipo;
    private String sql;
    private DataSource dt;
    public Cuenta objCuenta;

    public Concepto() {
        dt = new DataSource();
        objCuenta = new Cuenta();
    }

    public String getConcepto() {
        return concepto;
    }

    public void setConcepto(String concepto) {
        this.concepto = concepto;
    }

    public Double getPrecio() {
        return precio;
    }

    public void setPrecio(Double precio) {
        this.precio = precio;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    private int getMax() {
        return Sql.getMax("IDCONCEPTO", "CONCEPTO", true);

    }

    public boolean EliminarConcepto(String concepto) {
        if (Sql.isExiste("SELECT * FROM CONCEPTO WHERE IDCONCEPTO "
                + "IN (SELECT IDCONCEPTO FROM DETALLEFACTURA  "
                + "JOIN FACTURA ON FACTURA.IDFACTURA=DETALLEFACTURA.IDFACTURA) "
                + "AND CONCEPTO='" + concepto + "'") == true) {
            Dialogos.Error("El concepto ya esta facturado... No se puede eliminar");
            return false;
        } else if (global.Mensajes.mostrarPregunta("¿Realmente desea eliminar el concepto?") == true) {
            Sql.eliminar("DELETE FROM CONCEPTO WHERE IDCONCEPTO NOT "
                    + "IN (SELECT IDCONCEPTO FROM DETALLEFACTURA  "
                    + "JOIN FACTURA ON FACTURA.IDFACTURA=DETALLEFACTURA.IDFACTURA) "
                    + "AND CONCEPTO='" + concepto + "'");
            return true;
        }

        return false;
    }

    public boolean guardarConcepto() {
        if (this.ExistenciaConcepto() == true) {
            Dialogos.Error("El concepto ya existe...");
            return false;
        } else if (Sql.insertar("INSERT INTO CONCEPTO VALUES(" + this.getMax() + ", " + this.getId() + ", '" + objCuenta.getCodigo() + "', '" + concepto + "'," + precio + ",'" + tipo + "')") == true) {
            Dialogos.GuardadoconExito();
            return true;
        } else {
            Dialogos.Error("Error al guardar");
            return false;
        }
    }

    public void getConceptoJlist(DefaultListModel ls) {
        ls.clear();
        Sql.getConsulta("SELECT CONCEPTO FROM CONCEPTO", dt);
        while (dt.next()) {
            ls.addElement(dt.getString(1));
        }
        dt.cerrar();

    }

    public String consultarPrecio(String concepto) {
        Sql.getConsulta("SELECT PRECIO FROM CONCEPTO WHERE CONCEPTO='" + concepto + "' ", dt);
        while (dt.next()) {

            return dt.getString(1);
        }
        return "";
    }

    public DefaultTableModel listarConceptos(DefaultTableModel modelo, String grupo) {
        DefaultTableModel modelo1 = new DefaultTableModel();
        modelo1.addColumn("Cod");
        modelo1.addColumn("Cod2");
        modelo1.addColumn("Cod3");

        dt = new DataSource();
        Sql.getConsulta("SELECT IDCONCEPTO,CONCEPTO,PRECIO FROM CONCEPTO JOIN GRUPO ON  GRUPO.IDGRUPO=CONCEPTO.IDGRUPO\n"
                + "WHERE(GRUPO.GRUPO='" + grupo + "' ) ", dt);
        String[] fila;

        while (dt.next()) {
            fila = new String[3];
            fila[0] = dt.getString(1);
            fila[1] = dt.getString(2);
            fila[2] = dt.getString(3);
            modelo1.addRow(fila);

        }
        fila = new String[3];
        fila[0] = "ww";
        fila[0] = "ww";
        fila[0] = "ww";

        //System.out.println(modelo1.getRowCount());
        return modelo1;

    }

    public boolean ExistenciaConcepto() {
        sql = "SELECT * FROM CONCEPTO WHERE CONCEPTO='" + concepto + "'";
        return Sql.isExiste(sql);
    }

    public boolean ExistenciaConcepto(String concepto) {
        sql = "SELECT * FROM CONCEPTO WHERE CONCEPTO='" + concepto + "' AND CONCEPTO!='" + this.concepto + "'";
        return Sql.isExiste(sql);
    }

    public boolean actualizarConcepto() {
        if (Sql.actualizar("UPDATE CONCEPTO SET IDGRUPO=" + this.getId() + ", "
                + "CODIGOCUENTA='" + this.objCuenta.getCodigo() + "', "
                + "CONCEPTO='" + this.concepto + "', PRECIO=" + this.precio + ","
                + " TIPO='" + this.tipo + "' WHERE IDCONCEPTO='" + this.idconcepto + "'") == true) {
            Dialogos.GuardadoconExito();
            return true;
        } else {
            Dialogos.Error("Error al actualizar los datos");
            return false;
        }
    }

    public String SqlGeneral() {
        sql = "SELECT CONCEPTO, GRUPO, DESCRIPCION, PRECIO, CONCEPTO.TIPO FROM CONCEPTO "
                + "JOIN GRUPO ON GRUPO.IDGRUPO=CONCEPTO.IDGRUPO "
                + "JOIN CUENTA ON CUENTA.CODIGOCUENTA=CONCEPTO.CODIGOCUENTA "
                + "ORDER BY(IDCONCEPTO) DESC";

        return sql;
    }

    public String SqlConcepto(String concepto) {
        sql = "SELECT CONCEPTO, GRUPO, DESCRIPCION, PRECIO, CONCEPTO.TIPO FROM CONCEPTO "
                + "JOIN GRUPO ON GRUPO.IDGRUPO=CONCEPTO.IDGRUPO "
                + "JOIN CUENTA ON CUENTA.CODIGOCUENTA=CONCEPTO.CODIGOCUENTA "
                + " WHERE CONCEPTO LIKE ('" + concepto + "%')"
                + "ORDER BY(IDCONCEPTO) DESC";

        return sql;
    }

    public String SqlPrecio(int precio) {
        sql = "SELECT CONCEPTO, GRUPO, DESCRIPCION, PRECIO, CONCEPTO.TIPO FROM CONCEPTO "
                + "JOIN GRUPO ON GRUPO.IDGRUPO=CONCEPTO.IDGRUPO "
                + "JOIN CUENTA ON CUENTA.CODIGOCUENTA=CONCEPTO.CODIGOCUENTA "
                + " WHERE PRECIO = " + precio + ""
                + "ORDER BY(IDCONCEPTO) DESC";
        return sql;
    }

    public String Sqltipo(String tipo) {
        sql = "SELECT CONCEPTO, GRUPO, DESCRIPCION, PRECIO, CONCEPTO.TIPO FROM CONCEPTO "
                + "JOIN GRUPO ON GRUPO.IDGRUPO=CONCEPTO.IDGRUPO "
                + "JOIN CUENTA ON CUENTA.CODIGOCUENTA=CONCEPTO.CODIGOCUENTA "
                + " WHERE CONCEPTO.TIPO LIKE ('" + tipo + "%')"
                + "ORDER BY(IDCONCEPTO) DESC";
        return sql;
    }

    public String SqlGrupo(String grupo) {
        sql = "SELECT CONCEPTO, GRUPO, DESCRIPCION, PRECIO, CONCEPTO.TIPO FROM CONCEPTO "
                + "JOIN GRUPO ON GRUPO.IDGRUPO=CONCEPTO.IDGRUPO "
                + "JOIN CUENTA ON CUENTA.CODIGOCUENTA=CONCEPTO.CODIGOCUENTA "
                + " WHERE GRUPO LIKE ('" + grupo + "%')"
                + "ORDER BY(IDCONCEPTO) DESC";
        return sql;
    }

    public String SqlCuenta(String cuenta) {
        sql = "SELECT CONCEPTO, GRUPO, DESCRIPCION, PRECIO, CONCEPTO.TIPO FROM CONCEPTO "
                + "JOIN GRUPO ON GRUPO.IDGRUPO=CONCEPTO.IDGRUPO "
                + "JOIN CUENTA ON CUENTA.CODIGOCUENTA=CONCEPTO.CODIGOCUENTA "
                + " WHERE DESCRIPCION LIKE ('" + cuenta + "%')"
                + "ORDER BY(IDCONCEPTO) DESC";
        return sql;
    }

    public void ConsultaConcepto(DefaultTableModel modelo, JTable tabla, String sql, JLabel Lpaginatotal, JLabel Lpagina, int pagina) {
        modelo = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int fila, int columna) {
                return false;
            }
        };

        tabla.setModel(modelo);
        modelo.addColumn("CONCEPTO");
        modelo.addColumn("GRUPO");
        modelo.addColumn("CUENTA");
        modelo.addColumn("PRECIO");
        modelo.addColumn("TIPO");
        DefaultTableCellRenderer centrar = new DefaultTableCellRenderer();
        centrar.setHorizontalAlignment(SwingConstants.RIGHT);
        tabla.getColumnModel().getColumn(3).setCellRenderer(centrar);
        TableColumn columna = new TableColumn();
        columna = tabla.getColumnModel().getColumn(0);
        columna.setPreferredWidth(250);
        columna = tabla.getColumnModel().getColumn(1);
        columna.setPreferredWidth(250);
        columna = tabla.getColumnModel().getColumn(2);
        columna.setPreferredWidth(250);

        sql = objPaginacion.getPaginacion(sql, pagina, 24);
        Sql.getConsulta(sql, dt);

        String[] fila;

        while (dt.next()) {
            fila = new String[5];
            fila[0] = dt.getString(1);
            fila[1] = dt.getString(2);
            fila[2] = dt.getString(3);
            fila[3] = dt.getString(4);
            fila[4] = dt.getString(5);
            modelo.addRow(fila);

        }
        objPaginacion.actualPagina(Lpagina);
        objPaginacion.totalPaginas(Lpaginatotal);
        tabla.getSelectionModel().setSelectionInterval(0, 0);

    }

    public void llenardatosConcepto(String concepto) {
        sql = "SELECT * FROM CONCEPTO WHERE CONCEPTO='" + concepto + "'";
        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            this.idconcepto = dt.getInt(1);
            this.getGrupo(dt.getInt(2));
            this.objCuenta.getCuenta(dt.getString(3));
            this.concepto = dt.getString(4);
            this.tipo = dt.getString(6);
            this.precio = dt.getDouble(5);

        }
    }

}
